Il est trs courant dans un script d'avoir besoin un moment ou un autre de demander des informations l'utilisateur.
On pourrait par exemple demander la nouvelle taille d'une image qu'on souhaite modifier, l'URL d'un site web ou encore un chemin de dossier dans lequel on veut crire des donnes.
Pour demander des informations un utilisateur dans un script en ligne de commande, on utilise avec Python la fonction input.
La fonction input accepte un argument qui correspond au texte que l'on souhaite afficher l'utilisateur.
Par exemple, si on souhaite demander l'ge de l'utilisateur :
>>> input("Quel ge avez-vous ? ")
Quel ge avez-vous ? L'utilisateur peut ensuite crire la fin de la phrase affiche.
La saisie de l'utilisateur est ensuite retourne par la fonction input :
>>> input("Quel ge avez-vous ? ")
Quel ge avez-vous ? 25
'25'En l'tat actuel, cela ne sert pas grand-chose car nous ne rcuprons par cette valeur dans une variable.
Pour ce faire, il suffit de faire une affectation simple lors de l'utilisation de la fonction input.
Une fois les donnes renseignes par l'utilisateur, la valeur retourne sera affecte dans la variable indique :
>>> age = input("Quel ge avez-vous ? ")
Quel ge avez-vous ? 25
>>> print(age)
25Depuis la version 3 de Python, la fonction input retourne systmatiquement une chane de caractres.
Ainsi, la variable age dans l'exemple ci-dessus ne sera pas considre comme un nombre entier mais comme une chane de caractres contenant le nombre 25, ce que l'on peut vrifier avec la fonction type :
>>> age = input("Quel ge avez-vous ? ")
Quel ge avez-vous ? 25
>>> type(age)
<class 'str'>Si vous souhaitez convertir la variable age en nombre entier, il faudra donc utiliser la fonction de conversion int.
Avant l'apparition de la version 3 de Python, il existait deux fonctions pour rcuprer des donnes de l'utilisateur : la fonction input et la fonction raw_input.
La fonction raw_input de Python 2 est l'quivalent de la fonction input de Python 3. Cette fonction retournait systmatiquement une chane de caractres.
La fonction input avec Python 2 quant elle interprtait le rsultat donn par l'utilisateur.
Ainsi, quand l'utilisateur renseignait un nombre entier par exemple, la fonction input retournait directement un objet de type nombre entier.
Ce problme ne se pose plus avec Python 3 qui n'a conserv que la fonction raw_input d'origine et l'a renomm en 'input'.
Ainsi, avec Python 3, seule la fonction input demeure, et elle vous retournera systmatiquement une chane de caractres.
Cela peut sembler tre un inconvnient (on aimerait bien recevoir directement un nombre quand l'utilisateur nous envoie un nombre).
Dans la pratique, cela permet de redonner le contrle au dveloppeur.
Les donnes retournes par la fonction input sont ainsi constantes (chane de caractres), et c'est au dveloppeur de valider les donnes par la suite et, s'il le souhaite, de changer le type de la variable.
Python ne se charge donc plus de raliser des oprations notre place, oprations qui dans certains cas pouvaient tre problmatiques, par exemple si l'on envoyait du texte la fonction input sans l'entourer de guillemets (la fonction input interprtant le rsultat comprenait ainsi le texte saisi par l'utilisateur comme une variable et non pas une chane de caractres) :
>>> prenom = input("Quel est votre prnom ? ")
Quel est votre prnom ? Thibault
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'Thibault' is not defined Ici, Python value Thibault comme une variable, variable qui n'existe pas dans notre script. On obtient donc une erreur de type NameError.